import hashlib
import random
from typing import Union
import os


def _seed_from_string(s: str) -> int:
    """从字符串生成稳定的整数种子（跨进程/跨运行一致）。"""
    h = hashlib.sha256(s.encode("utf-8")).digest()
    return int.from_bytes(h, "big")

def stable_random_by_key(key: str, min_value: Union[int, float], max_value: Union[int, float]):
    """
    基于字符串 key 生成可重复的“随机”数：
    - 若 min/max 都为 int，返回 int（闭区间 [min, max]）
    - 否则返回 float（闭区间 [min, max]）
    """
    if min_value > max_value:
        min_value, max_value = max_value, min_value  # 自动纠正区间顺序

    seed = _seed_from_string(key)
    rng = random.Random(seed)  # 局部 RNG，不影响全局随机状态
    return rng.randint(min_value, max_value)


def get_root_dir():
    cur_dir=os.path.dirname(os.path.abspath(__file__))
    root_dir=os.path.dirname(os.path.dirname(cur_dir))
    return root_dir

def get_dealed_data_dir():
    root_dir=get_root_dir()
    return root_dir+"/data_process/dealed_data"

def get_datas_dir():
    return "/root/autodl-tmp/CallGraph_dataset"






if __name__ == "__main__":
    # # 示例用法
    # coefficients=calculate_independent_event_probabilities([0.2,0.5,0.6])
    # coefficients.append(-0.5)
    # print(coefficients)
    # # coefficients = np.random.rand(100)
    # solution = solve_multivariable_linear_equation(coefficients)

    # if solution is not None:
    #     print("找到解决方案:", solution)
    # else:
    #     print("没有满足条件的解")
    a=1
    # return

# 示例
# if __name__ == "__main__":
#     # print(stable_random_by_key("hello", 1, 10))       # 同一 key 每次运行都相同（int）
#     # print(stable_random_by_key("hello", 0.0, 1.0))    # 同一 key 每次运行都相同（float）
#     # print(stable_random_by_key("hello", 10, 1))
#     print(calculate_independent_event_probabilities([0.2,0.5,0.6])) 